package com.imooc.coupon.constant;

import lombok.AllArgsConstructor;
import lombok.Getter;

import java.util.Objects;
import java.util.stream.Stream;

/**
 * 优惠券有效期类型
 * Created By TINY
 * Create Time 2020/2/9 - 15:44
 **/
@Getter
@AllArgsConstructor
public enum  PeriodType {

    // 优惠券在固定日期内有效
    REGULAR("优惠券在固定日期内有效", 1),
    // 优惠券在用户领取后开始计算时间，超过有效时间后失效
    SHIFT("优惠券在用户领取后开始计算时间，超过有效时间后失效", 2);

    /** 有效期类型描述 */
    private String description;

    /** 有效期类型编码 */
    private Integer code;

    public static PeriodType of(Integer code) {
        Objects.requireNonNull(code);

        return Stream.of(values()).filter(value -> value.code.equals(code))
                .findAny().orElseThrow(
                        () -> new IllegalArgumentException(
                                code + " 对应的优惠券有效期类型不存在"));
    }
}
